<?php

namespace fast;

use think\Config;

/**
 * 短链
 * @author XiaoYao <476552238li@gmail.com>
 */
class Urlshorten
{
    protected static $instance;
    //默认配置
    protected $config = [];
    public $options = [];

    /**
     * 生成树型结构所需要的2维数组
     * @var array
     */
    public $arr = [];

    /**
     * 生成树型结构所需修饰符号，可以换成图片
     * @var array
     */
    public $icon = array('│', '├', '└');
    public $nbsp = "&nbsp;";
    public $pidname = 'pid';

    public function __construct($options = [])
    {
        if ($config = config('shorturl')) {
            $this->config = array_merge($this->config, $config);
        }
        $this->options = array_merge($this->config, $options);
    }
    /**
     * 初始化
     * @access public
     * @param array $options 参数
     * @return Tree
     */
    public static function instance($options = [])
    {
        if (is_null(self::$instance)) {
            self::$instance = new static($options);
        }

        return self::$instance;
    }

    /**
     * 初始化方法
     * @param array  $arr     2维数组，例如：
     *      array(
     *      1 => array('id'=>'1','pid'=>0,'name'=>'一级栏目一'),
     *      2 => array('id'=>'2','pid'=>0,'name'=>'一级栏目二'),
     *      3 => array('id'=>'3','pid'=>1,'name'=>'二级栏目一'),
     *      4 => array('id'=>'4','pid'=>1,'name'=>'二级栏目二'),
     *      5 => array('id'=>'5','pid'=>2,'name'=>'二级栏目三'),
     *      6 => array('id'=>'6','pid'=>3,'name'=>'三级栏目一'),
     *      7 => array('id'=>'7','pid'=>3,'name'=>'三级栏目二')
     *      )
     * @param string $pidname 父字段名称
     * @param string $nbsp    空格占位符
     * @return Tree
     */
    public function init($arr = [], $pidname = null, $nbsp = null)
    {
        $this->arr = $arr;
        if (!is_null($pidname)) {
            $this->pidname = $pidname;
        }
        if (!is_null($nbsp)) {
            $this->nbsp = $nbsp;
        }
        return $this;
    }
    
    /**
     * 得到子级数组
     * @param int
     * @return array
     */
    public function createChain($longurl,$valid_time=0)
    {
        $url = $this->options['host'].'v1/chain/createChain';
        $param = [
            'apikey'=>$this->options['apikey'],
            'target_url'=>$longurl,
            // 'valid_time'=>date('Y-m-d H:i:s',time()+1800),
        ];
        if (!empty($valid_time)) {
            $param['valid_time'] = date('Y-m-d H:i:s',time()+$valid_time);
        }
        return $this->post($url,$param);
    }
    protected function post($url,$post_fields=array())
    {
        // var_dump(http_build_query($post_fields));exit;
        $ch=curl_init();

        curl_setopt($ch,CURLOPT_URL,$url);//用PHP取回的URL地址（值将被作为字符串）
        curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);//使用curl_setopt获取页面内容或提交数据，有时候希望返回的内容作为变量存储，而不是直接输出，这时候希望返回的内容作为变量
        curl_setopt($ch,CURLOPT_TIMEOUT,30);//30秒超时限制
        // curl_setopt($ch,CURLOPT_HEADER,1);//将文件头输出直接可见。
        curl_setopt($ch,CURLOPT_POST,1);//设置这个选项为一个零非值，这个post是普通的application/x-www-from-urlencoded类型，多数被HTTP表调用。
        curl_setopt($ch,CURLOPT_POSTFIELDS, http_build_query($post_fields));//post操作的所有数据的字符串。
        // curl_setopt($ch,CURLOPT_POSTFIELDS, $post_fields);//post操作的所有数据的字符串。
        $data = curl_exec($ch);//抓取URL并把他传递给浏览器
        curl_close($ch);//释放资源
        $data = json_decode($data,true);
        if (empty($data)||$data['code'] !==1 ) {
            $data= [
                'code'=>0,
                'msg'=>empty($data)?'生成短链失败':$data['msg'],
            ];
        }
        return $data; //然后在这里返回数组。
    }

}
